With the advent of massive multi-core computer processing architectures, it is increasingly a challenge to adapt software to take optimal advantage of the concurrent processing capabilities of such architectures. For example, if method A in one computer processing thread updates a data object, and method B in another computer processing thread reads or updates the data object, then if A and B run concurrently, B may read inconsistent values. To remedy this, programming languages and libraries typically provide support for synchronization and locking, allowing a programmer to guarantee that methods or critical sections of software code are accessed by only one thread at a time. These techniques guarantee consistency but can greatly limit the amount of concurrency in a system and can result is very poor utilization of the cores in a multi-core system. Existing approaches attempt to solve this problem for the most part by decreasing the overhead of synchronization primitives. However, there is a limit on how much this can improve the performance of a concurrent computing system.